package com.heihei.enums.localres;


import com.heihei.utils.FileUtilsF;
import org.apache.commons.lang.StringUtils;

import java.io.File;
import java.util.HashMap;
import java.util.Objects;

/**
 *  文件类型
 *
 * @author duanhengfei
 * 2021年12月28日 23:41:37
 */
public enum FileTypeEnum {
    DIR(1, "文件夹"),
    VIDEO(2, "视频"),
    IMG(3, "图片"),
    RESTS_FILE(4, "其他文件")
    ;

    private static final HashMap<Integer, String> allTypeMap;

    private static final HashMap<Integer, String> allTypeIconMap;

    static {
        //key和文件类型描述的map
        allTypeMap = new HashMap<>();
        allTypeMap.put(1, "文件夹");
        allTypeMap.put(2, "视频");
        allTypeMap.put(3, "图片");
        allTypeMap.put(4, "其他文件");
        //key和icon的map
        allTypeIconMap = new HashMap<>();
        allTypeIconMap.put(1, "el-icon-folder");
        allTypeIconMap.put(2, "el-icon-video-camera");
        allTypeIconMap.put(3, "el-icon-picture");
        allTypeIconMap.put(4, "el-icon-files");
    }

    private Integer key;

    private String description;


    FileTypeEnum(Integer key, String description) {
        this.key = key;
        this.description = description;
    }

    public Integer getKey() {
        return key;
    }

    public String getDescription() {
        return description;
    }

    /**
     * 根据File，获取文件类型
     *
     * @author duanhengfei
     * 2021年12月29日 00:19:56
     */
    public static Integer getFileType(File file) {
        if(Objects.isNull(file)) {
            return RESTS_FILE.getKey();
        }
        if(file.isDirectory()) {
            return DIR.getKey();
        }
        //获取后缀名
        String sufix = FileUtilsF.getSufixOfFile(file);
        if(StringUtils.isEmpty(sufix)) {
            return RESTS_FILE.getKey();
        }
        sufix = sufix.toLowerCase();
        if(FileUtilsF.isVideo(sufix, 2)) {
            return VIDEO.getKey();
        }
        if(FileUtilsF.isImg(sufix, 2)) {
            return IMG.getKey();
        }
        return RESTS_FILE.getKey();
    }

    public static String getDescriptionByKey(Integer key) {
        if(allTypeMap.containsKey(key)) {
            return allTypeMap.get(key);
        }
        return "ERROR";
    }

    public static String getIconByKey(Integer key) {
        if(allTypeIconMap.containsKey(key)) {
            return allTypeIconMap.get(key);
        }
        return "ERROR";
    }
}
